<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8" />
		<meta http-equiv="X-UA-Compatible" content="IE=edge" />
		<meta name="viewport" content="width=device-width, initial-scale=1.0" />
		<title>Document</title>
	</head>
	<body>
		<script>
			// 发布订阅 简单实现
			// 思路:需要实现一个调度中心队列，存储订阅事件
			//      订阅 on 添加事件名和事件到调度中心
			//      发布 emit 在调度中心队列找到对应事件名执行（发布）

			//实现对象
			let eventEmitter = {}
			//调度中心
			eventEmitter.list = {}
			eventEmitter.on = function (eventName, event) {
				if (!this.list[eventName]) {
					this.list[eventName] = []
				}
				this.list[eventName].push(event)
			}
			eventEmitter.emit = function () {
				const args = [...arguments]
				const name = args[0]
				const fns = this.list[name]
				if (!fns) return
				fns.forEach((fn) => {
					fn.call(this, args[1])
				})
			}
			function user1(content) {
				console.log('用户1订阅了:', content)
			}

			function user2(content) {
				console.log('用户2订阅了:', content)
			}
			eventEmitter.on('user', user1)
			eventEmitter.on('user', user2)
			eventEmitter.on('zzzz', user2)
			eventEmitter.emit('user', '测试')
			eventEmitter.emit('zzzz', 'zzzzz')
		</script>
	</body>
</html>
